const crypto=require('crypto')
const request=require('request')
const schedule=require('node-schedule')
const config=require('../config')

module.exports={
    /**
     * 验证数据签名是否正确
     * @param {请求数据} data 
     */
    checkToken(data){
        if(data&&data.event&&data.token){
            return this.md5(config.pwd)===data.token;
        }
        return false;
    },
    /**
     * 构建成功操作返回信息
     * @param {成功提示信息} msg 
     * @param {成功码 0} code 
     * @param {额外数据} data 
     */
    success(msg='操作成功!',code=0,data=[]){
        return {success:true,msg,code,data}
    },
    /**
     * 构建错误操作返回信息
     * @param {错误提示信息} msg 
     * @param {错误码 非0} code 
     * @param {额外数据} data 
     */
    error(msg='操作失败!',code=1,data=[]){
        return {success:false,msg,code,data}
    },
    /**
     * md5 加密
     * @param {string} val 
     */
    md5(val){
        let md5=crypto.createHash('md5');
        return md5.update(val).digest('hex')
    },
    /**
     * 00:00:00 转为定时 时间 {hour: 0, minute: 0, second: 0}
     * @param  {String} val      例：16:50:01
     * @param  {Number} [type=0] 转换类型
     * @return {Object|String}   可直接使用于node-schedule 的时间对象或字符串
     */
    formatTime(val,type=0){
        if(!val){
            return ;
        }
        let format=['hour','minute','second'];
        let date=val.split(':');
        let result={};
        format.forEach((item,index)=>{
            result[item]=date[index];
        })
        return result
    },
    startTask(data){
        if(!data.member_id||(!data.start_time&&!data.runtime)||!data.id){
            return;
        }
        let self=this,date,member_id=data.member_id,task_id=data.id;
        if(data.loop){ //循环任务
            date=this.formatTime(data.runtime);
        }else{
            date=new Date(data.start_time*1000);
        }
        if(!date){
            return;
        }
        schedule.scheduleJob(date,_=>{
            let url=config.apiHost+'index/api/pushTask';
            let time=Date.now(); //请求接口时间
            let token=self.md5(task_id.toString()+time.toString()+config.pwd);
            request.get(url,{
                qs:{
                    time,
                    task_id,
                    token,
                }
            },(err,res)=>{
                if(err){
                    console.log(err)
                }else{
                    console.log(res.body)
                }
            })
        })
    },
}